﻿/* Класс выполняет общие действия с файлами - открытие/закрытие, чтение/запись
 */
using System;
using System.IO;
using System.Windows.Forms;

namespace CSFontan
{
    class FileClass
    {
        public StreamReader FileReader;
        public StreamWriter FileWriter, LogWriter;
        protected DateTime LogTime;
        private String PathToExe;
        public String Line_i;       // буфер чтения/записи файла

        public FileClass()
        {
            PathToExe = new FileInfo(Application.ExecutablePath).DirectoryName;
            LogTime = new DateTime();
        }

        // File_Stream = true => файл открывается на чтение
        // File_Stream = false => файл открывается на запись
        public Boolean StreamOpen(String FileName, bool File_Stream)
        {
            if (!File.Exists(FileName) & File_Stream)
            {
                MessageBox.Show("Файл "+FileName+" не существует");
                return false;
            }
            else
            {
                if (File_Stream)
                {
                    try
                    {
                        FileReader = new StreamReader(FileName, true);
                        return true;
                    }
                    catch
                    {                        
                        MessageBox.Show("Невозможно открыть файл для чтения "+FileName);
                        return false;
                    }                    
                }
                else if (!File_Stream)
                {
                    try
                    {
                        FileWriter = new StreamWriter(FileName, false);
                        return true;
                    }
                    catch
                    {
                        MessageBox.Show("Невозможно открыть файл для записи " + FileName);
                        return false;
                    }
                }
                // других типов object кроме StreamReader & StreamWriter быть не должно
                else
                    return false;
            }
        }     // StreamOpen

        // File_Stream = true => файл закрывается на чтение
        // File_Stream = false => файл закрывается на запись
        public Boolean StreamClose(String FileName, Boolean File_Stream)
        {
            if (!File.Exists(FileName))
            {
                MessageBox.Show("Файл " + FileName + " не существует");
                return false;
            }
            if (File_Stream)
            {
                try
                {
                    FileReader.Close();
                    return true;
                }
                catch
                {
                    MessageBox.Show("Файл " + FileName + " закрыть невозможно");
                    return false;
                }                
            }
            else if (!File_Stream)
            {
                try
                {
                    FileWriter.Close();
                    return true;
                }
                catch
                {
                    MessageBox.Show("Файл " + FileName + " закрыть невозможно");
                    return false;
                }                
            }
            else
                return false;
        }    // end StreamClose

        protected Boolean WriteToLog(String Line_i)
        {
            LogTime = DateTime.Now;
            try
            {
                LogWriter = new StreamWriter(PathToExe + @"\FormInput.log", true);
                try
                {
                    LogWriter.WriteLine(LogTime.ToString("DD/mm/yy HH:mm:ss") + " " + Line_i);
                    try
                    {
                        LogWriter.Close();
                        return true;
                    }
                    catch
                    {
                        return false;
                    }
                }
                catch
                {
                    return false;
                }
            }
            // не удалось открыть файл для записи
            catch
            {
                return false;
            }
        }

        public String LineRead()
        {
            try
            {
                return FileReader.ReadLine();
            }
            catch
            {
                WriteToLog("Не удалось прочитать строку из файла");
                return String.Empty;
            }
        }      // end LineRead()

        public Boolean LineWrite(String Line_i)
        {
            try
            {
                FileWriter.WriteLine(Line_i);
                return true;
            }
            catch
            {
                WriteToLog("не удалось записать " + Line_i);
                return false;
            }
        }
    }
}
